package main

import (
	"fmt"
	"helloword01/23customerprac/model"
	"helloword01/23customerprac/service"
)

type CustomerView struct {

	//定义一个字段，控制菜单显示是否退出
	loop bool

	//定义一个字段，接收用户输入
	key string

	//定义一个CustomerService 字段，主要用于完成对客户信息的各种操作。
	customerService *service.CustomerService
}

//显示主菜单
//	-----------------客户信息管理软件-----------------
//
//    1 添 加 客 户
//    2 修 改 客 户
//    3 删 除 客 户
//    4 客 户 列 表
//    5 退           出
//
//    请选择(1-5)：_

func (cv *CustomerView) mainMenu() {

	for {
		fmt.Println("-----------------客户信息管理软件-----------------")
		fmt.Println("                 1 添 加 客 户")
		fmt.Println("                 2 修 改 客 户")
		fmt.Println("                 3 删 除 客 户")
		fmt.Println("                 4 客 户 列 表")
		fmt.Println("                 5 退      出")
		fmt.Print("请选择(1-5)：")
		fmt.Scanln(&cv.key)

		switch cv.key {
		case "1":
			cv.add()
		case "2":
			cv.update()
		case "3":
			cv.delete()
		case "4":
			cv.list()
		case "5":
			cv.loop = false
		default:
			fmt.Println("输入错误")
		}
		if !cv.loop {
			fmt.Println("您已经退出客户信息管理软件~")
			break
		}
	}
}

//编写一个方法，可以显示客户信息
//	---------------------------客户列表---------------------------
//	编号  姓名       性别    年龄   电话            邮箱
//	 1    张三       男      30     010-56253825   abc@email.com
//	 2    李四       女      23     010-56253825    lisi@ibm.com
//	 3    王芳       女      26     010-56253825   wang@163.com
//	-------------------------客户列表完成-------------------------

func (cv *CustomerView) list() {

	//调用 customerService 获取到 客户信息切片
	customerList := cv.customerService.List()
	if len(customerList) == 0 {
		fmt.Println("---------------------------客户列表为空，请先添加客户---------------------------")
		return
	}

	//显示
	fmt.Println("---------------------------客户列表---------------------------")
	fmt.Println("编号\t姓名\t性别\t年龄\t电话\t邮箱")

	//遍历
	for i := 0; i < len(customerList); i++ {
		fmt.Println(customerList[i].GetInfo())
	}
	fmt.Println("---------------------------客户列表完成---------------------------")

}

//添加客户
//	---------------------添加客户---------------------
//	姓名：张三
//	性别：男
//	年龄：30
//	电话：010-56253825
//	邮箱：zhang@abc.com
//	---------------------添加完成---------------------

func (cv *CustomerView) add() {

	fmt.Println("---------------------添加客户---------------------")
	fmt.Println("姓名：")
	name := ""
	fmt.Scanln(&name)
	fmt.Println("性别：")
	gender := ""
	fmt.Scanln(&gender)
	age := 0
	fmt.Println("年龄：")
	fmt.Scanln(&age)
	fmt.Println("电话：")
	phone := ""
	fmt.Scanln(&phone)
	fmt.Println("邮箱：")
	email := ""
	fmt.Scanln(&email)

	//根据用户输入，创建一个Customer对象
	customer := model.GenerateCustomerWithoutId(name, gender, age, phone, email)
	if cv.customerService.Add(customer) {
		fmt.Println("---------------------添加客户成功---------------------")
	} else {
		fmt.Println("---------------------添加客户失败---------------------")
	}
}

//删除
//	---------------------删除客户---------------------
//	请选择待删除客户编号(-1退出)：1
//	确认是否删除(Y/N)：y
//	---------------------删除完成---------------------

func (cv *CustomerView) delete() {

	fmt.Println("---------------------删除客户---------------------")
	ids := cv.customerService.GetCustomerIds()
	fmt.Println("客户IDS:", ids)
	fmt.Println("请选择待删除客户编号(-1退出)")
	id := 0
	fmt.Scanln(&id)
	//如果用户输入-1
	if id == -1 {
		return
	}
	fmt.Println("确认是否删除(Y/N)：")

	choice := ""
	fmt.Scanln(&choice) // 可以

	if choice == "Y" || choice == "y" {

		if cv.customerService.Delete(id) {
			fmt.Println("---------------------删除完成---------------------")
		} else {
			fmt.Println("---------------------删除失败,id不存在---------------------")
		}
	}
}

func (cv *CustomerView) update() {

	fmt.Println("---------------------修改客户---------------------")
	ids := cv.customerService.GetCustomerIds()
	fmt.Println("客户IDS:", ids)
	fmt.Println("请选择待修改客户编号(-1退出)")
	id := 0
	fmt.Scanln(&id)
	//如果用户输入-1
	if id == -1 {
		return
	}

	custom := cv.customerService.FindCustomerById(id)
	if custom == nil {
		fmt.Println("---------------------修改失败,该客户不存在---------------------")
		return
	}
	fmt.Println("修改前：", custom.GetInfo())

	fmt.Println("姓名：")
	name := ""
	fmt.Scanln(&name)
	fmt.Println("性别：")
	gender := ""
	fmt.Scanln(&gender)
	age := 0
	fmt.Println("年龄：")
	fmt.Scanln(&age)
	fmt.Println("电话：")
	phone := ""
	fmt.Scanln(&phone)
	fmt.Println("邮箱：")
	email := ""
	fmt.Scanln(&email)
	custom.UpdateCustomer(id, name, gender, age, phone, email)
	fmt.Println("修改后：", custom.GetInfo())
}

func main() {

	customerView := CustomerView{
		loop: true,
	}
	customerView.customerService = service.GenerateCustomerService()
	customerView.mainMenu()
}
